package com.memoir.model.dto;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;

@Data
public class LoginUserDTO {
    /**
     * id
     */
    private Long id;

    /**
     * 用户昵称
     */
    private String username;

    /**
     * 用户头像
     */
    private String userAvatar;

    /**
     * 微信开放平台id
     */
    private String unionId;

    /**
     * 苹果账号id
     */
    private String appleId;

    /**
     * 公众号openId
     */
    private String mpOpenId;

    /**
     * 性别
     */
    private Integer gender;

    /**
     * 电话
     */
    private String phone;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 所在城市
     */
    private String city;

    /**
     * （毕业/所在学校）
     */
    private String school;

    /**
     * IP地址
     */
    private String ip;

    /**
     * 信誉状态(-2-差，-1-较差，0-正常，1-良好，2-优秀)
     */
    private Integer userCredit;

    /**
     * 用户签名（一段文描述介绍自己）
     */
    private String userSign;

    /**
     * 用户的标签（json数组）
     */
    private String userTags;

    /**
     * 生日
     */
    private LocalDateTime birthday;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 用户角色：user/admin/ban
     */
    private String userRole;

    /**
     * 社区编号
     */
    private String communityId;

    /**
     * 系统认证称号
     */
    private String systemAuthentication;


    private static final long serialVersionUID = 300516242003600438L;

    public static Map<String, Object> voToMap(LoginUserDTO loginUserVO) {
        if (loginUserVO == null) {
            return null;
        }
        Map<String, Object> userMap = BeanUtil.beanToMap(loginUserVO, new HashMap<>(),
                // 属性拷贝选项，创建并忽略对象中为空的属性，设置 变量名 / 值  -> key / value
                CopyOptions.create().setIgnoreNullValue(true).setFieldValueEditor((fieldName, fieldValue) -> {
                    if (fieldValue == null) {
                        return null;
                    }
                    return fieldValue.toString();
                }));
        return userMap;
    }

    public static LoginUserDTO mapToLoginUser(Map<String, Object> userMap) {
        if (userMap.isEmpty()) {
            return null;
        }
        return BeanUtil.copyProperties(userMap, LoginUserDTO.class);
    }
}
